////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//                                                                                                                            //
//                                                         WNProject                                                          //
//                                                                                                                            //
//            This file is distributed under the BSD 2-Clause open source license. See License.txt for details.               //
//                                                                                                                            //
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#pragma once

#ifndef __WN_CONCURRENCY_CALL_ONCE_H__
#define __WN_CONCURRENCY_CALL_ONCE_H__

#include "WNCore/inc/WNPlatform.h"
#include "WNCore/inc/WNTypes.h"

typedef WN_ATOM_T WN_ONCE_FLAG_T;

#define WN_ONCE_FLAG_INIT 0

typedef WN_VOID (*WN_CALL_ONCE_FUNCTION_T)(WN_VOID);

namespace WNConcurrency {
    WN_INLINE WN_VOID WNCallOnce(WN_ONCE_FLAG_T* _flag, WN_CALL_ONCE_FUNCTION_T _function);
}

#include "WNConcurrency/inc/WNCallOnce.inl"

#endif // __WN_CONCURRENCY_CALL_ONCE_H__
